package chapter30.meituan;

public class Box {
    //定义成员变量表示第几个快递（快递序号）
    private int express;
    //定义一个成员变量用于表示快递柜的状态
    private boolean flag = false;

    //存快递
    public synchronized void put(int express) {
        //如果有快递，那么快递员应该等待取件人来取快递
        if (flag) {
            try {
                wait();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        //如果没有快递，那么快递员就存入快递
        this.express = express;
        System.out.println("快递员将第" + this.express + "个快递存入了快递柜");
        //别忘了存完修改快递柜的状态
        flag = true;
        //修改完快递柜状态后，唤醒其他在等待的线程
        notifyAll();
    }

    //取快递
    public synchronized void get() {
        //如果有快递，那么取件人就取走快递
        if (flag) {
            System.out.println("取件人取出了第" + this.express + "个快递");
            flag = false;
            notifyAll();
        } else {
            //没有快递，那么取件人就等待
            try {
                wait();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

